#include "process.h"

#define NUM 101
#define SPACE ' '
#define STYLE '='
#define POINT '.'
const int pnum = 3;


void FlushProcess(double total, double current)
{
    //1.更新当前的百分比
    double rate = (current / total)*100;

    //2.更新当前的进度条
    char bar[NUM];//每1%更新一个进度条
    memset(bar,'\0',sizeof(bar));

    for(int i = 0; i < (int)rate;i++)
    {
        bar[i] = STYLE;
    }

    //3.更新旋转光标，...的数量
    //为什么要加上旋转光标？
    //如果进度条缓慢，每次进入函数，取整之后进度条没有变化，此时可以通过旋转光标有无变化来判断程序是否在正常运行
    static int num = 0;
    num++;
    num %= pnum;
    char points[pnum+1];
    for(int i = 0; i < pnum;i++)
    {
        if(i < num)
            points[i] = POINT;
        else
            points[i] = SPACE;

    }

    //4.打印进度条
    printf("[%-100s][%.1lf%%]%s\r",bar,rate,points);
    fflush(stdout);
}

//vesion1
// //效果[====>                           ]  [ ] [ ],最后>会消失
// void Process()
// {
//     const char* lable = "|/-\\";
//     int len = strlen(lable);

//     char bar[NUM];
//     memset(bar,'\0',sizeof(bar));

//     int cnt = 0;
//     while(cnt <= 100)
//     {
//         printf("[%-100s][%d%%][%c]\r",bar,cnt,lable[cnt%len]);//进度条主体
//         fflush(stdout);//刷新缓冲区，显示到显示器中
//         bar[cnt] = STYLE;
//         cnt++;

//         //处理最后一个字符
//         if(cnt == NUM)
//         {
//             bar[cnt-1] = '\0';
//             printf("[%-100s][%d%%][%c]\r",bar,cnt-1,lable[(cnt-1)%len]);//进度条主体
//             break;
//         }

//         bar[cnt] = '>';
//         usleep(50000);//unsleep单位是微秒，sleep单位是秒
//     }
// }